package com.tian.auto.model;

import com.tian.auto.Constants;
import com.tian.auto.Log;
import com.tian.auto.info.ResData;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

/**
 * 更新英文环境下的值的model
 */
public class EnUpdateModel extends AbsUpdateModel {

    private final static String TAG = EnUpdateModel.class.getSimpleName();

    public EnUpdateModel(ResData resData, HashMap<String, String> targetMap, List<String> xmlFilesPath) {
        super(resData, targetMap, xmlFilesPath);
    }

    @Override
    public void updateStringValues(Document document, Element element, String path) throws Exception {
        if (!resData.getEnValue().equals(element.getStringValue())) {
            element.setText(resData.getEnValue());
            saveUpdateToXml(path, document);
        }
        resData.setEnValuePath(path);
        Log.info(TAG, element.getName() + "  " + element.attributes().get(0).getName() + " " + element.attributes().get(0).getValue() + " " + element.getStringValue());
    }

    @Override
    public void createXmlAndInsertStringValues(File file) throws Exception {
        Log.info(TAG, "start create");
        //检测在values-en下对应的 string_xxx.xml文件是否存在,不存在就需要创建
        String xmlFilePath = file.getAbsolutePath();
        Document doc;
        //检测文件是否存在
        if (new File(xmlFilePath).exists()) {
            SAXReader reader = new SAXReader();
            doc = reader.read(new File(xmlFilePath));
        } else {
            doc = DocumentHelper.createDocument();
        }

        //创建doc
        Element rootElement = doc.getRootElement();
        if (rootElement == null) { //在新建文件的时候 需要添加根节点
            rootElement = doc.addElement(Constants.ElementValues.ELEMENT_ROOT);
        }
        rootElement.addElement(Constants.ElementValues.ELEMENT_STRING).addAttribute(Constants.ElementValues.NAME, targetKey).setText(resData.getEnValue());

        saveUpdateToXml(xmlFilePath, doc);
        resData.setEnValuePath(xmlFilePath);
    }

    @Override
    public void updateStringArrayValues(Document document, Element element, String path) throws Exception {
        //注意在values string-array是肯定有定义的并且 数组长度是够的不存在补的问题，其他的2个目录不一样
        Iterator<Element> iterator = element.elementIterator("item");
        int currentIndex = 0;
        while (iterator.hasNext()) {
            Element itemChild = iterator.next();
            //指定位置上的item的值是否和excel中定义的一至
            if (currentIndex == arrayIndex) {
                if (!resData.getEnValue().equals(itemChild.getStringValue())) {
                    itemChild.setText(resData.getEnValue());
                    saveUpdateToXml(path, document);
                }
                resData.setEnValuePath(path);
            }
            currentIndex++;
        }

        //说明需要 去补数据
        if (arrayIndex > element.elements().size() - 1) {
            //需要补几个数据
            int count = arrayIndex + 1 - element.elements().size();
            for (int i = 0; i < count; i++) {
                element.addElement(Constants.ElementValues.ELEMENT_ITEM).setText(resData.getEnValue());
                saveUpdateToXml(path, document);
            }
            resData.setEnValuePath(path);
        }
    }

    @Override
    public void createXmlAndInsertStringArrayValues(File file) throws Exception {
        Log.info(TAG, "start create array file");
        //检测在values-en下对应的 string_xxx.xml或array_xxx.xml文件是否存在,不存在就需要创建
        String xmlFilePath = file.getAbsolutePath();

        //创建doc
        Document doc;
        //检测文件是否存在
        if (new File(xmlFilePath).exists()) {
            SAXReader reader = new SAXReader();
            doc = reader.read(new File(xmlFilePath));
        } else {
            doc = DocumentHelper.createDocument();
        }

        Element rootElement = doc.getRootElement();
        if (rootElement == null) { //在新建文件的时候 需要添加根节点
            rootElement = doc.addElement(Constants.ElementValues.ELEMENT_ROOT);
        }
        //创建string-array 元素
        Element stringArrayElement = rootElement.addElement(Constants.ElementValues.ELEMENT_STRING_ARRAY).addAttribute(Constants.ElementValues.NAME, targetKey);
        for (int i = 0; i <= arrayIndex; i++) {
            stringArrayElement.addElement(Constants.ElementValues.ELEMENT_ITEM).setText(resData.getEnValue());
        }
        saveUpdateToXml(xmlFilePath, doc);
        resData.setEnValuePath(xmlFilePath);
    }
}
